package projet.camping.usecases;

import java.util.List;

import javax.ejb.Remote;

import projet.camping.domaine.Habitation;
import projet.camping.domaine.Habitation.Orientation;
import projet.camping.domaine.Habitation.TypeHabitation;
import projet.camping.domaine.Partie;
import projet.camping.exception.ArgumentInvalideException;
import projet.camping.exception.JoueurDeconnecteException;
import projet.camping.exception.NotYourTurnException;
import projet.camping.exception.PartieExistantException;
import projet.camping.exception.PartieNonExistantException;
import projet.camping.exception.PartieNonFinieException;
import projet.camping.exception.PartieNotOverException;
import projet.camping.exception.UserNonExistantException;

@Remote
public interface GestionPartie {
	// Cree la partie
	public Partie creerPartie(String nomUser, String nomPartie)
			throws UserNonExistantException, PartieExistantException, ArgumentInvalideException;

	// Met la partie en preparation
	public Partie ajouterJoueur(String nomUser, String nomPartie) throws PartieNonExistantException, ArgumentInvalideException;

	// Debute le jeu
	public boolean demarrerPartie(String nomPartie,String nomUser) throws PartieNonExistantException, ArgumentInvalideException;

	
	// public String getResultat(Partie p, Joueur j);
	public List<Partie> getPartiesTerminees();

	public List<Partie> getPartiesEnAttentes();

	public boolean isJoueurCourant(String nomUser, String nomPartie) throws PartieNonExistantException, ArgumentInvalideException;

	public boolean joueurDeconnecte(String nomUser, String nomPartie) throws PartieNonExistantException, ArgumentInvalideException;

	
	public Habitation lancerAttaque(String nomPartie, String nomUser, int x, int y)
			throws NotYourTurnException, PartieNonExistantException, ArgumentInvalideException;

	public Habitation receptionAttaque(String nomPartie,String nomUser) throws PartieNonExistantException, ArgumentInvalideException;


	public boolean lancerPartie(String nomPartie) throws PartieNonExistantException, ArgumentInvalideException;

	public int placerHabitation(String nomPartie, String nomUser, Orientation o,
			TypeHabitation t, int x1, int y1) throws PartieNonExistantException, ArgumentInvalideException;

	public String getGagnant(String nomPartie)throws PartieNonFinieException, JoueurDeconnecteException, PartieNonExistantException, ArgumentInvalideException;
	
	public boolean isOver(String nomPartie) throws PartieNonExistantException, ArgumentInvalideException;
	
	public Partie getPartieFinie(String nomPartie) throws PartieNotOverException, PartieNonExistantException, ArgumentInvalideException;
	
	public String getAutrePseudo(String nomPartie,String pseudo) throws PartieNonExistantException, ArgumentInvalideException;
	

}
